<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>错误控制运算符</title>

 </head>
 <body><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="language.operators.comparison.html">比较运算符</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="language.operators.execution.html">执行运算符</a></div>
 <div class="up"><a href="language.operators.html">运算符</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div><hr /><div id="language.operators.errorcontrol" class="sect1">
   <h2 class="title">错误控制运算符</h2>
   <p class="simpara">
    PHP 支持一个错误控制运算符：@。当将其放置在一个 PHP
    表达式之前，该表达式可能产生的任何错误信息都被忽略掉。
   </p>
   <p class="simpara">
    如果用 <span class="function"><a href="function.set-error-handler.html" class="function">set_error_handler()</a></span>
	设定了自定义的错误处理函数，仍然会被调用，但是此错误处理函数可以（并且也应该）调用
	<span class="function"><a href="function.error-reporting.html" class="function">error_reporting()</a></span>，而该函数在出错语句前有 @ 时将返回 0。
   </p>
   <p class="simpara">
    如果激活了 <a href="errorfunc.configuration.html#ini.track-errors" class="link"><strong class="option unknown">track_errors</strong>
</a>
    特性，表达式所产生的任何错误信息都被存放在变量
    <var class="varname"><var class="varname"><a href="reserved.variables.phperrormsg.html" class="classname">$php_errormsg</a></var></var>
    中。此变量在每次出错时都会被覆盖，所以如果想用它的话就要尽早检查。
   </p>
   <p class="para">
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">/*&nbsp;Intentional&nbsp;file&nbsp;error&nbsp;*/<br /></span><span style="color: #0000BB">$my_file&nbsp;</span><span style="color: #007700">=&nbsp;@</span><span style="color: #0000BB">file&nbsp;</span><span style="color: #007700">(</span><span style="color: #DD0000">'non_existent_file'</span><span style="color: #007700">)&nbsp;or<br />&nbsp;&nbsp;&nbsp;&nbsp;die&nbsp;(</span><span style="color: #DD0000">"Failed&nbsp;opening&nbsp;file:&nbsp;error&nbsp;was&nbsp;'</span><span style="color: #0000BB">$php_errormsg</span><span style="color: #DD0000">'"</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">//&nbsp;this&nbsp;works&nbsp;for&nbsp;any&nbsp;expression,&nbsp;not&nbsp;just&nbsp;functions:<br /></span><span style="color: #0000BB">$value&nbsp;</span><span style="color: #007700">=&nbsp;@</span><span style="color: #0000BB">$cache</span><span style="color: #007700">[</span><span style="color: #0000BB">$key</span><span style="color: #007700">];<br /></span><span style="color: #FF8000">//&nbsp;will&nbsp;not&nbsp;issue&nbsp;a&nbsp;notice&nbsp;if&nbsp;the&nbsp;index&nbsp;$key&nbsp;doesn't&nbsp;exist.<br /><br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
     </div>

    </div>
   </p>
   <blockquote class="note"><p><strong class="note">Note</strong>: 
    <span class="simpara">
     @ 运算符只对<a href="language.expressions.html" class="link">表达式</a>有效。对新手来说一个简单的规则就是：如果能从某处得到值，就能在它前面加上
     @ 运算符。例如，可以把它放在变量，函数和 <span class="function"><a href="function.include.html" class="function">include</a></span>
     调用，常量，等等之前。不能把它放在函数或类的定义之前，也不能用于条件结构例如
     <em>if</em> 和 <a href="control-structures.foreach.html" class="link">foreach</a> 等。
    </span>
   </p></blockquote>
   <p class="simpara">
    参见 <span class="function"><a href="function.error-reporting.html" class="function">error_reporting()</a></span>
    及手册中<a href="ref.errorfunc.html" class="link">错误处理及日志函数</a>的有关章节。
   </p>
   <div class="warning"><strong class="warning">Warning</strong>
    <p class="para">
     目前的“@”错误控制运算符前缀甚至使导致脚本终止的严重错误的错误报告也失效。这意味着如果在某个不存在或者敲错了字母的函数调用前用了“@”来抑制错误信息，那脚本会没有任何迹象显示原因而死在那里。
    </p>
   </div>
  </div><hr /><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="language.operators.comparison.html">比较运算符</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="language.operators.execution.html">执行运算符</a></div>
 <div class="up"><a href="language.operators.html">运算符</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div></body></html>
